package com.panorama.visitor;

import java.util.List;

public interface Visitor<R> {
	
	public abstract void visit(VisitableNode node);
	
	public abstract void visitChildren(VisitableNode node);
	
	public abstract Visitor<R> enter(VisitableNode node);
	
	public abstract R leave(VisitableNode node);
	
	public abstract R overrideValue(VisitableNode node);
	
	public abstract boolean override(VisitableNode node);
	
	public abstract void collect(List<R> values);
	
	public abstract void collect(R value);

}
